///**************************************************************************************************
//* Title: SmurfsCollisionStructures.h
//* Authors: Gael Huber
//* Description: Defines enumerations and structures used across physics methods and collision 
//*	detection systems.
//**************************************************************************************************/
//#ifndef __SMURFSCOLLISIONSTRUCTURES_H__
//#define __SMURFSCOLLISIONSTRUCTURES_H__
//
//#include "SmurfsVector3.h"
//#include "SmurfsSphere.h"
//
//enum Label { R0, R1, R2, R01, R12, R20, R012 };	// Labels Voronoi Region features
//
//struct Element {
//	float tMin, tMax;
//	Label label; 
//};
//
//struct Partition {
//	int numElements;
//	Element elements[7];
//};
//
//struct ContactInfo {
//	float time;
//	Vector3 contact;
//};
//
//struct Triangle {
//	Vector3 p0, p1, p2;
//
//	// Quantities derived from P0, P1, and P2
//	Vector3 u2;	// Cross (P1 - P0, P2-P0) / |Cross(P1-P0, P2-P0)|
//	Vector3 u0; // = (P1-P0)/Length(P1-P0)
//	Vector3 u1; // = Cross(N,U0)
//	Vector2 q0; // = (0,0)
//	Vector2 q1; // = (L,0) = (Length(P1-P0),0)
//	Vector2 q2; // = (A,B) = (Dot(U0,P2-P0),Dot(U1,P2-P0))
//	Vector2 e0; // = Q1 - Q0 = (L,0)
//	Vector2 e1; // = Q2 - Q1 = (A-L,B)
//	Vector2 e2; // = Q0 - Q2 = (-A,-B)
//	Vector2 n0; // = (0,-1)
//	Vector2 n1; // = (B,L-A)/sqrt(B*B+(L-A)*(L-A))
//	Vector2 n2; // = (-B,A)/sqrt(B*B+A*A)
//
//	// Implement this to compute the derived quantities. It must be called after P0, P1, and P2 are 
//	// initialized. If the triangle is used many times in sphere-triangle intersection test, call this
//	// function once and re-use derived quantities in GetContact.
//	void computeDerived(void);
//
//	// Partition projection (C + t*V) = K + t*W by triangle's Voronoi region.
//	Partition computePartition(Sphere sphere, Vector3 v);
//
//	// Clip K + t*W against he region identified by "label". Return true when there is overlap, in
//	// which case the return value "tMin" and "tMax" are valid with tMin < tMax.
//	bool getOverlapIntertal(Vector2 k, Vector2 w, Label label, float& tMin, float& tMax);
//
//	// When the projected line is degenerate to a point K, return the label of the Voronoi region that
//	// contains K. This is a point-in-convex-region test.
//	Label getContainingRegion(Vector2 k);
//	
//	// Compute the roots of the quadratic F(t) corresponding to the element.
//	void computeRoots(Sphere sphere, Vector3 v, Element element, int& numRoots, ContactInfo contact[2]);
//
//	// Compute the roots of a2*t^2 + 2*a1*t + a0 = 0 on the interval [tMin, tMax].
//	void solveQuadratic(float tMin, float tMax, float a0, float a1, float a2, int& numRoots, float roots[2]);
//};
//
//
//#endif